package design;

import design.masterWorker.Master;
import design.masterWorker.Task;
import design.masterWorker.Worker;

import java.util.Random;

/**
 * Master-Worker模式是一种将串行任务并行化的方案，被分解的子任务在系统中可以被并行处理，同时，如果
 * 有需要，Master进程不需要等待所有子任务都完成计算，就可以根据已有的部分结果集计算最终结果集
 * 客户端将所有任务提交给Master,Master分配Worker去并发处理任务，并将
 * 每一个任务的处理结果返回给Master,所有任务处理完毕后，由Master进行结果汇总再返回给Client
 *
 */
public class MasterWorkTest {
    public static void main(String[] args) {
        // 创建多个Worker
        Master master = new Master(new Worker(),Runtime.getRuntime().availableProcessors());
        Random r = new Random();
        for (int i = 0; i < 20; i++) {
            Task t = new Task();
            t.setId(i);
            t.setPrice(r.nextInt(1000));
            master.submit(t);
        }
        // master启动所有的worker
        master.execute();
        long start = System.currentTimeMillis();
        // 检测所有的worker是否都执行完毕
        while(true){
            if(master.isCompelete()){
                long end = System.currentTimeMillis() - start;
                int priceResult = master.getResult();
                System.out.println("最终结果" + priceResult + ",执行时间：" + end);
                break;
            }
        }
    }
}
